package ar.edu.untref.robotica.control;

import ar.edu.untref.robotica.simulador.ParEscenarioRobot;
import ar.edu.untref.robotica.simulador.Simulador;

public abstract class ModuloDeControl {
	
	private Simulador simulador;
	private ParEscenarioRobot parEscenarioRobot;
	
	public ModuloDeControl(Simulador simulador, ParEscenarioRobot parEscenarioRobot){
		this.parEscenarioRobot = parEscenarioRobot;
		this.simulador = simulador;
	}
	
	public ParEscenarioRobot getParEscenarioRobot() {
		return parEscenarioRobot;
	}

	public void setParEscenarioRobot(ParEscenarioRobot parEscenarioRobot) {
		this.parEscenarioRobot = parEscenarioRobot;
	}

	public Simulador getSimulador(){
		return this.simulador;
	}
	
	public synchronized void avanzar(){
		simulador.acelerarRobot(1, 1, this.parEscenarioRobot);
	}
	
	public synchronized void frenar() {
	
		simulador.acelerarRobot(0, 0, this.parEscenarioRobot);
	}
	
	public synchronized void retroceder() {
	
		simulador.acelerarRobot(-1, -1, this.parEscenarioRobot);
	}
	
	public synchronized void girarDerecha() {
	
		simulador.acelerarRobot(+1, -1, this.parEscenarioRobot);
	}
	
	public synchronized void girarIzquierda() {
		
		simulador.acelerarRobot(-1, +1, this.parEscenarioRobot);
	}
	
	public synchronized void acelerarRuedaIzquierda() {
		
		simulador.acelerarRobot(simulador.getVelocidadFinalDeseadaIzquierda() + 1,
				simulador.getVelocidadFinalDeseadaDerecha(), this.parEscenarioRobot);
	}
	
	public synchronized void desacelerarRuedaIzquierda() {
		
		simulador.acelerarRobot(simulador.getVelocidadFinalDeseadaIzquierda() - 1,
				simulador.getVelocidadFinalDeseadaDerecha(), this.parEscenarioRobot);
	}
	
	public synchronized void acelerarRuedaDerecha() {
		
		simulador.acelerarRobot(simulador.getVelocidadFinalDeseadaIzquierda(),
				simulador.getVelocidadFinalDeseadaDerecha() + 1, this.parEscenarioRobot);
	}
	
	public void desacelerarRuedaDerecha() {
		
		simulador.acelerarRobot(simulador.getVelocidadFinalDeseadaIzquierda(),
				simulador.getVelocidadFinalDeseadaDerecha() - 1, this.parEscenarioRobot);
	}
	
	public void agrandarPantalla() {
	
		simulador.getGraficador().aumentarZoom();
	}
	
	public void achicarPantalla() {
	
		simulador.getGraficador().disminuirZoom();
	}
	
	public void sensarAdelante(){
	
		System.out.println("Obstaculo a "
				+ simulador.getRobot().getDistanciaObstaculoAdelante(simulador.getEscenario()));
	}
	
	public void sensarAtras(){
		
		System.out.println("Obstaculo a "
				+ simulador.getRobot().getDistanciaObstaculoAtras(simulador.getEscenario()));
	}
	
	public void sensarIzquierda(){
		
		System.out.println("Obstaculo a "
				+ simulador.getRobot().getDistanciaObstaculo45Izquierda(simulador.getEscenario()));
	}
	
	public void sensarDerecha(){
		
		System.out
		.println("Obstaculo a "+ simulador.getRobot().getDistanciaObstaculo45Derecha(simulador.getEscenario()));
	}
}
